package com.vates.gestion.dao.impl;
import java.util.List;
import javax.persistence.*;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Repository;
import com.vates.entidades.Cliente;
import com.vates.gestion.dao.BaseDAO;

@Repository(value = "clienteDAO")
public class ClienteDAOImpl implements BaseDAO<Cliente> {

	private EntityManager em;

	@PersistenceContext
	public void setEntityManager(EntityManager em) {
		this.em = em;
	}

	@Override
	@Transactional(readOnly = false)
	public Cliente nuevo(Cliente entidad) {
		return em.merge(entidad);
	}

	@Override
	@Transactional(readOnly = true)
	public Cliente buscarPorId(int id) {
		Cliente c = em.find(Cliente.class, id);
		return c;
	}

	@Override
	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<Cliente> buscarTodos() {
		List<Cliente> listaClientes = em.createQuery("SELECT c FROM Cliente c")
				.getResultList();
		return listaClientes;
	}

	@Override
	@Transactional(readOnly = true)
	@SuppressWarnings("unchecked")
	public List<Cliente> buscarPorNombre(String nombre) {
		List<Cliente> listaClientes = em
				.createQuery(
						"SELECT c FROM Cliente c WHERE :nombre LIKE c.nombre")
				.setParameter("nombre", nombre).getResultList();
		return listaClientes;

	}

	@Override
	@Transactional(readOnly = false)
	public void eliminar(int id) {
		Cliente cliente = em.find(Cliente.class, id);
		System.out.println(cliente.toString());
		em.remove(cliente);
		System.out.println("Cliente Eliminado");

	}

	@Override
	@Transactional(readOnly = false)
	public void modificar(Cliente entidad) {
		Cliente cliente = new Cliente();
		if (entidad.getId_cliente() != 0) {
			em.merge(cliente);
		} else {
			em.persist(cliente);
		}
	}
	
	
	
}
